package com.douxg.fastCoding.spring.consts;

import lombok.Getter;

/**
 * @Description 全局业务码
 * 业务码类型主要分为两大类：错误码和非错误码
 * 错误码其值尽量与http状态码保持一致，细化的分类会以http状态码为开头，
 * 非错误码以900开头
 * 主要类型有以下几种：
 * （900）本程序自用的业务码
 * （200）业务操作成功
 * （204）无响应内容
 * （400）参数异常
 * （500）未知错误
 * （5000）指定的其它错误
 * （5001）外部接口或者数据库异常
 * （5002）业务错误
 * （5003）因为粗心大意所致的代码错误
 * @Auther douxg
 * @Date 2020/4/16 14:12
 */
@Getter
public enum BizCode {
    SUCCESS(200, "成功"),
    NO_CONTENT(204, "无响应内容"),

    PARAM_ISNULL(4001, "参数为空"),
    PARAM_ERROR(4002, "参数错误"),
    NO_LOGIN_ERROR(4003, "未登录，请先登录"),
    LOGIN_ERROR(4004, "登录失败，用户名和密码不一致"),
    ACCESS_ERROR(4005, "无权限"),

    NO_URL(404, "url地址不存在"),

    SYSTEM_BUSY(5000, "系统繁忙，请稍后再试"),
    UNKNOW_IP_ERROR(50000, "无法获取本地ip", "系统出错"),

    DB_NO_CON(50010, "数据库未连接，请先连接数据库", "数据库未连接"),
    DB_JDBC_URL_ERROR(50011, "jdbcUrl错误"),
    DB_CON_ERROR(50012, "数据库连接失败，请检查参数"),
    DBTYPE_NO_EXIST(50013, "暂不支持该数据库"),
    DB_NO_DATA(50014, "数据库无相应数据"),
    DB_NO_ONLY_ONE(50015, "查询数据不唯一", "查询数据不唯一"),

    DOWN_ERROR(5002, "下载失败"),

    ENJOY_ERROR(5009, "enjoy未知错误"),
    ENJOY_NO_ERROR(50090, "模板不存在"),

    OTHER(500, "未知错误", "系统出错");

    /**
     * 业务码
     */
    private int code;
    /**
     * 展示给开发人员的信息
     */
    private String msg;
    /**
     * 展示给请求方的信息
     */
    private String bizMsg;

    private BizCode(int bizCode) {
        this(bizCode, null, null);
    }

    private BizCode(int bizCode, String msg) {
        this(bizCode, msg, msg);
    }

    private BizCode(int bizCode, String msg, String bizMsg) {
        this.code = bizCode;
        this.msg = msg;
        this.bizMsg = bizMsg;
    }

    public static BizCode getByCode(Integer code) {
        if (code != null) {
            for (BizCode bizCode : values()) {
                if (bizCode.code == code) {
                    return bizCode;
                }
            }
        }
        return null;
    }
}
